
class IUINode(object):
    """
    IUINode 类是一个抽象基类，用于定义 UI 节点的基本接口。
    其他具体的 UI 节点类可以继承该类并实现其方法。
    """

    def __init__(self):
        """
        初始化 IUINode 实例。
        调用父类的构造函数完成初始化。
        """
        super(IUINode, self).__init__()

    def isReroute(self):
        """
        判断该节点是否为重定向节点。
        默认返回 False，表示不是重定向节点。

        :return: 布尔值，指示该节点是否为重定向节点。
        """
        return False

    def serializationHook(self):
        """
        序列化钩子方法，用于在节点序列化时执行特定操作。
        该方法必须由子类实现，否则会抛出 NotImplementedError 异常。

        :raises NotImplementedError: 当子类未实现该方法时抛出。
        """
        raise NotImplementedError("serializationHook of IUINode is not implemented")


class IPropertiesViewSupport(object):
    """
    IPropertiesViewSupport 类是一个抽象基类，用于定义支持属性视图的接口。
    实现该接口的类可以创建属性视图的小部件。
    """

    def __init__(self):
        """
        初始化 IPropertiesViewSupport 实例。
        调用父类的构造函数完成初始化。
        """
        super(IPropertiesViewSupport, self).__init__()

    def createPropertiesWidget(self, propertiesWidget):
        """
        创建属性视图的小部件。
        当前方法为空实现，子类可以根据需要重写该方法。

        :param propertiesWidget: 用于显示属性的小部件。
        """
        pass


class IDataExporter(object):
    """
    Data exporter/importer

    该类是一个抽象基类，定义了数据导出和导入的接口。
    编辑器的数据可以通过实现该接口的类导出到任意格式，也可以从任意格式导入。
    """

    def __init__(self):
        """
        初始化 IDataExporter 实例。
        调用父类的构造函数完成初始化。
        """
        super(IDataExporter, self).__init__()

    @staticmethod
    def creationDateString():
        """
        获取数据导出器的创建日期字符串。
        该方法必须由子类实现，否则会抛出 NotImplementedError 异常。

        :raises NotImplementedError: 当子类未实现该方法时抛出。
        """
        raise NotImplementedError(
            "creationDateString method of IDataExporter is not implemented"
        )

    @staticmethod
    def version():
        """
        获取数据导出器的版本号。
        该方法必须由子类实现，否则会抛出 NotImplementedError 异常。

        :raises NotImplementedError: 当子类未实现该方法时抛出。
        """
        raise NotImplementedError("version method of IDataExporter is not implemented")

    @staticmethod
    def displayName():
        """
        获取数据导出器的显示名称。
        该方法必须由子类实现，否则会抛出 NotImplementedError 异常。

        :raises NotImplementedError: 当子类未实现该方法时抛出。
        """
        raise NotImplementedError(
            "displayName method of IDataExporter is not implemented"
        )

    @staticmethod
    def toolTip():
        """
        获取数据导出器的工具提示信息。
        默认返回空字符串，子类可以重写该方法提供自定义提示信息。

        :return: 工具提示信息字符串。
        """
        return ""

    @staticmethod
    def createImporterMenu():
        """
        判断是否创建导入器菜单。
        默认返回 True，表示创建导入器菜单，子类可以重写该方法。

        :return: 布尔值，指示是否创建导入器菜单。
        """
        return True

    @staticmethod
    def createExporterMenu():
        """
        判断是否创建导出器菜单。
        默认返回 True，表示创建导出器菜单，子类可以重写该方法。

        :return: 布尔值，指示是否创建导出器菜单。
        """
        return True

    @staticmethod
    def doImport(pyFlowInstance):
        """
        执行数据导入操作。
        该方法必须由子类实现，否则会抛出 NotImplementedError 异常。

        :param pyFlowInstance: PyFlow 实例，用于导入数据。
        :raises NotImplementedError: 当子类未实现该方法时抛出。
        """
        raise NotImplementedError("doImport method of IDataExporter is not implemented")

    @staticmethod
    def doExport(pyFlowInstance):
        """
        执行数据导出操作。
        该方法必须由子类实现，否则会抛出 NotImplementedError 异常。

        :param pyFlowInstance: PyFlow 实例，用于导出数据。
        :raises NotImplementedError: 当子类未实现该方法时抛出。
        """
        raise NotImplementedError("doExport method of IDataExporter is not implemented")